容器监控实践:Prometheus、Grafana 方案介绍
0. 引言
K8s 时代监控选型绕不开 Prometheus。本文先拆解 Prometheus 的核心组件与整体架构,再与 Zabbix 做选型对比,最后演示 Prometheus + Grafana + node_exporter 从数据采集到图表展示的完整链路。
1. Prometheus 核心组件
Prometheus 是 Go 语言开发的开源监控系统,继 Kubernetes 之后第二个 CNCF 托管项目,官方网站 https://prometheus.io/。核心组件如下:
| 组件 | 作用 |
|---|---|
| Prometheus server | 核心组件,拉取监控数据并存入时序数据库,是整个系统的"心脏" |
| 客户端 SDK | 植入监控的应用程序中,完成数据采集 |
| Push Gateway | 中间网关,承接客户端主动推送的监控数据,再供 server 拉取 |
| Exporter | 数据采集组件总称,从目标节点搜集数据并转化为 Prometheus 可抓取的格式 |
| Alertmanager | 告警管理器,统一处理 Prometheus 发出的告警并触发通知 |
2. 整体监控架构

Prometheus server 内部包含三部分:采集模块(Retrieval)、时序数据库 TSDB、对外 HTTP 服务接口。采集模块通过 discover targets 动态发现 K8s 集群中的目标节点(Pod),用 pull metrics 方式拉取数据。数据来源有两种:
- 通过 Exporter 采集节点数据,标准化为通用 metric 接口供 server 抓取;
- 客户端推送数据到 Push Gateway 转换,server 再拉取网关数据。
数据存入 TSDB 后,经运算、转换、逻辑处理,通过 HTTP 接口对外提供访问。触发报警规则时,告警推送给 Alertmanager,由它负责发送邮件等通知。可视化方面,可用自带的 Prometheus web UI,也可集成 Grafana 做更丰富的展示。
3. Prometheus 与 Zabbix 对比
| 维度 | Zabbix | Prometheus |
|---|---|---|
| 开发语言 | PHP | Go |
| 代码成熟度 | 问世早,更成熟 | 较新,部分代码需加固 |
| 性能 | 关系库存储限制性能 | 自研时序数据库,V3 可达每秒千万级存储 |
| K8s/容器支持 | 很晚才兼容动态发现、容器编排 | 原生完美支持 K8s 动态发现 |
| 配置复杂度 | 控制台配置完善,较简单 | 配置项与规则运算多,复杂度更高 |
| 数据获取方式 | 主动/被动均可 | Pull 方式,服务端方便水平扩展 |
结论:除配置复杂度外,Prometheus 在性能、K8s 支持、水平扩展方面均占优,是当前 K8s 部署场景下监控系统的首选。
4. Prometheus + Grafana 搭建演示
4.1 安装 Prometheus
容器方式安装:
docker run -d -p 9090:9090 \
-v ~/docker/prometheus/:/etc/prometheus/ \
prom/prometheus配置文件在挂载目录 prometheus.yml,包含两块:global(全局配置)和 scrape_configs(抓取目标,按需修改)。启动后浏览器访问 http://<IP>:9090 进入 Prometheus UI。
4.2 安装 Grafana 并配置数据源
docker run -d -p 3000:3000 grafana/grafana访问 http://<IP>:3000,默认账号 admin/admin。登录后点击 Data Source → add data source → 选择 Prometheus,配置:
- HTTP URL:Prometheus 服务地址与端口;
- Scrape interval:采集间隔,如 15 秒;
- HTTP Method:GET 方式请求。
4.3 客户端 Exporter 采集
下载解压 node_exporter 后直接执行 ./node_exporter 启动,它提供 metric 数据接口(默认端口 9100)供服务端拉取。在 Prometheus 的 scrape_configs 中填入客户端 IP 与 9100 端口,重启 Prometheus 容器。
4.4 验证与图表展示
Prometheus UI 的 Status 页面可查看目标节点、状态与采集时间。再到 Grafana 的 Dashboards → import,搜索导入 Node Exporter 面板插件,即可看到 CPU、内存、负载、磁盘等指标的图表化展示。
5. 小结
Prometheus 以 Pull 模式 + 时序数据库 + 原生 K8s 服务发现取胜,Exporter 生态让采集面覆盖操作系统、中间件、业务应用;Grafana 负责统一可视化。与 Zabbix 相比,Prometheus 更适合动态、容器化的云原生环境,但配置复杂度更高,需要团队具备一定的规则与指标设计能力。监控数据的最终价值在于驱动 46 章的告警与值班闭环,而非只是"看得见"。
下一章讲解回滚与运行手册,把发布事故的兜底动作固化成可执行的标准流程。